package msg

// 服务器返回ID号
const (
	// 内部错误
	S2C_ID_InnerError = -1

	// 登录消息
	S2C_ID_LoginSuccess  = 0 //登录成功
	S2C_ID_LoginFailed   = 1 //登录失败
	S2C_ID_LoginRepeated = 2 //重复登录
	// 注册消息
	S2C_ID_RegisterSuccess = 0 //注册成功
	S2C_ID_RegisterFailed  = 1 //注册失败
	// 匹配玩家消息
	SC2_ID_MatchingGoldShortage = 0 //金币不足
	SC2_ID_MatchingInsufficient = 1 //人数不足
	// 游戏异常终止
	S2C_ID_BattleExceptionNotLoaded = 0 //有玩家为载入
)

// =====================================================================================================================

// 被关闭
type S2C_Close struct {
	ID  int
	Msg string
}

// =====================================================================================================================
// 用户登录
type C2S_Login struct {
	Account  string
	Password string
}

// 返回登录结果
type S2C_Login struct {
	ID  int
	Msg string
}

// =====================================================================================================================
// 用户注册
type C2S_Register struct {
	Account  string
	Password string
}

// 返回用户注册结果
type S2C_Register struct {
	ID  int
	Msg string
}

// 用户结构体信息
type S2C_User struct {
	Account  string
	Nickname string
	Avatar   string
	Level    int
	Gold     int
}

// =====================================================================================================================
// 客户端发匹配
type C2S_Matching struct {
	// ID 是匹配类型,0=轮回模式 1=速射模式
	ID    int
	Score int //分数
}

// 服务端返回匹配信息
type S2C_Matching struct {
	Obj []MatchingInfo
}

type MatchingInfo struct {
	Index    int    //射箭顺序
	Account  string //玩家账号
	Nickname string //玩家昵称
	Avatar   string //玩家头像URL
	Level    int    //玩家等级
}

// 服务器返回错误
type S2C_MatchingError struct {
	ID  int
	Msg string
}

// =====================================================================================================================

//// 接受心跳包
//type C2S_Pong struct {
//	Pong string
//}

// =====================================================================================================================
// 战斗-准备完毕
type C2S_BattleReady struct {
	OK bool
}

// 战斗-开始游戏(都准备好之后,通知开始游戏)
type S2C_BattleStartGame struct {
	OK bool
}

// 战斗-加载战斗完毕
type C2S_BattleLoadComplete struct {
	OK bool
}

// 战斗-通知射箭(所有玩家都加载到战斗场景之后则开始通知下一个玩家射箭)
type S2C_BattleNextShot struct {
	Account string //下一个玩家的账号
	Index   int    //下一个玩家的索引
}

type Vector3 struct {
	X float32
	Y float32
	Z float32
}

// 战斗-玩家射箭
type C2S_BattleShot struct {
	Score       int     //射箭得分
	AimingPoint Vector3 //瞄准坐标
}

// 战斗-箭中靶了,射箭完毕.然后服务器可以通知下一位射箭者
type C2S_BattleShotComplete struct {
	OK bool //是否射箭完毕
}

// 战斗-广播射箭给另一人
type S2C_BattleShot struct {
	PlayerIndex int
	Score       int
	AimingPoint Vector3 //准星坐标
}

// 战斗-离开房间(再来一局时用的)
type C2S_BattlePlayerLeave struct {
	Account string //另一个人的账号
}

// 战斗-战斗中玩家离开
type S2C_BattlePlayerLeave struct {
	Account string //离开人的账号
	Index   int    //离开玩家的索引
}

// 战斗-游戏结束
type S2C_BattleEnd struct {
	WinnerAccount string //赢家账号
	WinnerIndex   int    //赢家顺序号
	Prize         int    //奖金
	LoosFee       int    //损耗费
	VenueFees     int    //场地费
	FinalIncome   int    //最 终所得
}

// 战斗-异常结束
type S2C_BattleException struct {
	ID  int
	Msg string
}

// 战斗-玩家发送发送表情
type C2S_BattleEmoji struct {
	Emoji string
}

// 战斗-推送玩家的表情
type S2C_BattleEmoji struct {
	Index int    //玩家索引号
	Emoji string //表情序号
}
